Digital systems are used extensively in computation and data processing, controls, communications and measurement. Digital systems use digital signals that may only assume discrete values. Typically, digital systems use binary signals that employ only two values. Since such systems only use two distinct values, errors caused by component variations are minimized. As a result, a digital system may be designed such that, for a given input, an output thereof is exactly correct and repeatable. This gives rise to the extreme accuracy for which digital systems are well known.
Analog systems, on the other hand, use analog signals that vary continuously over a specified range. Analog systems are thus particularly vulnerable to error, depending on the accuracy of the components used therein. Since digital systems are generally capable of greater accuracy and reliability than analog systems, many tasks formerly performed by analog systems are now performed exclusively by digital systems.
A digital system, such as a computer, typically includes an input device, an output device, a processor or central processing unit (CPU) and a data storage device (e.g., random access memory or hard disk). A CPU typically contains an arithmetic/logic unit (ALU) that performs arithmetic functions (e.g., add, subtract, multiply and divide) and logic functions (e.g., AND, OR and NOT). Additionally, a CPU may also contain a floating point unit (FPU) that performs floating point operations (e.g., add, subtract, multiply and divide)
One basic building block of digital systems is a logic gate. Conventional logic gates have one output and one or more inputs. The number of inputs is called the "fan-in" of the gate. The state of the output is completely determined by the state(s) of the input(s).
Logical and arithmetic functions are typically performed by a number of logic gates coupled together to form a multi-layer network. The maximum number of gates cascaded in series between the input and the output of such a network is typically referred to as the number of layers of gates. Designers are concerned with the number of layers in a network for several reasons. In some applications, increasing the number of layers may reduce the required number of gates and gate inputs (i.e., fan-in), thus reducing the cost (which may be expressed in terms of integrated circuit area) of building the network. Of course, cascading a large number of gates together may result in unacceptable input-output delays and data dependency conditions. When the input of a gate is switched, a finite time elapses before the output of the gate changes. If a large number of gates are cascaded together to form a network, the time between an input change and a corresponding change in the network output may become excessive, thereby slowing down the operation of the network.
Arithmetic functions are particularly susceptible to the effects of cascaded gates. The serial solution for binary addition is given here as an example. Initially, a first augend bit and a first addend bit are added together, to produce a first sum bit and a first carry bit. The first carry bit is then added to the second augend and addend bits to produce the second sum and carry bits. Since the second sum bit is dependent on the value of the first carry bit, the second sum bit cannot be computed before the first carry bit is computed. While each input-output delay is small, the cumulative input-output delay perceived when adding large numbers, due to the propagation of the carry bit, is proportional to the number of bits added, and may be prohibitive. Techniques (e.g., carry look-ahead, conditional sum or prefix computation have been developed for reducing the delay to a logarithmic function of the number of input bits to be added. The number of Boolean gates (e.g., AND, OR or NOT) used by such techniques is in the range of from 8n to 35n or 2n log(n) to 3n log(n), where on is the number of bits to be added and the logarithms are base two.
Increasing processing power is a continuing goal in the development of microprocessors. Microprocessor designers are generally familiar with three ways to increase the processing power of a CPU. The CPU's clock frequency may be increased so that the CPU can perform a greater number of operations in a given time period. Microprocessors are designed to operate at increasingly high clock frequencies. For instance, the 8080 (introduced in 1974 by the Intel Corporation) was designed to operate at about 2 to 3 MHZ. Today, Intel's Pentium II line of processors are designed to operate with clock frequencies over 300 MHZ. While a higher clock frequency generally results in increased processing power, the higher clock frequency also increases power dissipation, resulting in higher device operating temperatures. Microprocessor designers, therefore, must address these additional problems to avoid catastrophic device failures.
Another way to increase processing power is to increase input and output data bus width, thereby allowing the CPU to process a greater amount of code and data. Early microprocessors were packaged using dual in-line packaging (DIP) technology. Increasing the width of the data buses was both expensive and unrealistic, often resulting in extremely large device packages. Today, with the use of pin grid array (PGA) packaging, increasing the size of the data buses no longer poses a packaging problem. Of course, a larger number of transistors is required to process the additional information conveyed by the wider data buses.
Yet another way to increase processing power is to change the internal architecture of the microprocessor to overlap the execution of instructions by, for example, superscaling. This method also requires the addition of a large number of transistors, since entire processing stages or execution units must be duplicated. Performing a large number of instructions in parallel may also result in data dependency problems.
Accordingly, what is needed in the art is new architectures for addition circuitry, multiplication circuitry and combinations of the same that increase the processing power of conventional digital systems.